package cl.easyRestaurant.controllers.pedidos;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.model.DataModel;
import javax.faces.model.SelectItem;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;

import cl.easyRestaurant.business.pedidos.IPedidosBusiness;
import cl.easyRestaurant.business.pedidos.IProductosBusiness;
import cl.easyRestaurant.models.pedidos.DetallePedidoModel;
import cl.easyRestaurant.models.pedidos.PedidoModel;
import cl.easyRestaurant.models.pedidos.ProductoModel;

public class RealizarPedidoController {
	
	@EJB
	private IProductosBusiness productosBusiness;
	
	@EJB
	private IPedidosBusiness pedidosBusiness;
	
	private String idProducto;
	
	private List<SelectItem> productos;
	
	private HttpSession session;
	
	private HttpServletRequest request;
	
	private DataModel<DetallePedidoModel> detallePedidoSesion;
	
	@PostConstruct
	public void init() {
		
		this.request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
		
		this.productos = new ArrayList<SelectItem>();
		
		try {
			
			List<ProductoModel> productos = this.productosBusiness.GetProductos(); 
			
			for(ProductoModel p : productos) {
				this.productos.add(new SelectItem(p.getIdProducto(), p.getGlosaProducto()));
			}
			
			this.session = (HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(true);
			
		}
		catch(Exception e) {
			this.productos.add(new SelectItem("0", "No hay productos"));
		}
		
	}
	
	public String agregarProductoToPedido() {
		
		PedidoModel pedidoActual = (PedidoModel)this.session.getAttribute("PedidoSesion");
		
		if (pedidoActual == null) {
			
			Integer newIdPedido = this.pedidosBusiness.GetLastId() + 1;
			
			PedidoModel newPedido = new PedidoModel();
			
			newPedido.setEstadoPedido("Solicitando");
			
			String horaPedido = String.valueOf(Calendar.HOUR_OF_DAY) + String.valueOf(Calendar.MINUTE);
			
			newPedido.setHoraPedido(horaPedido);
			
			String fechaPedido = String.valueOf(Calendar.YEAR) + String.valueOf(Calendar.MONTH) + String.valueOf(Calendar.DAY_OF_MONTH); 
			
			newPedido.setFechaPedido(fechaPedido);
			
			newPedido.setIdChef("12345678");
			
			String idCliente = this.request.getParameter("IdCliente");
			
			newPedido.setIdCliente(idCliente);
			
			newPedido.setIdPedido(newIdPedido);
			
			this.pedidosBusiness.SavePedido(newPedido);
			
			this.session.setAttribute("PedidoSesion", newPedido);
			
			pedidoActual = newPedido;
		
		}
		
		if (pedidoActual != null) {
		
			this.pedidosBusiness.AddProductoToPedido(this.idProducto, pedidoActual);
			
			this.setDetallePedidoSesion(this.pedidosBusiness.GetDetallePedido(pedidoActual.getIdPedido()));
		
		}
		
		return "RealizarPedido.jsp";
		
	}
	
	public String confirmarPedido() {
		
		try {
			
			PedidoModel pedidoActual = (PedidoModel)this.session.getAttribute("PedidoSesion");
			
			this.pedidosBusiness.ConfirmarPedido(pedidoActual);
			
			this.session.removeAttribute("PedidoSesion");
			
			return "ConfirmacionPedidoExitosa.jsp";
			
		} catch(Exception e) {
			
			return "ConfirmacionPedidoNoExitosa.jsp";
			
		}
		
	}

	public List<SelectItem> getProductos() {
		return productos;
	}

	public void setProductos(List<SelectItem> productos) {
		this.productos = productos;
	}

	public String getIdProducto() {
		return idProducto;
	}

	public void setIdProducto(String idProducto) {
		this.idProducto = idProducto;
	}

	public DataModel<DetallePedidoModel> getDetallePedidoSesion() {
		return detallePedidoSesion;
	}

	public void setDetallePedidoSesion(
			DataModel<DetallePedidoModel> detallePedidoSesion) {
		this.detallePedidoSesion = detallePedidoSesion;
	}

}
